﻿using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using VisionCloud.Core.Model.Ms;
using VisionCloud.Domain.DtoModel.Ms;

namespace VisionCloud.Domain.Repository.Interface.Ms
{
    public interface IMsPointTypeRepository : IBaseRepository<MsPointType>
    {
        Task<List<MsPointType>> GetTemplateList();

        /// <summary>
        /// 取所有站点类型
        /// </summary>
        /// <param name="hasDeleted">是否包含逻辑删除的数据</param>
        /// <returns></returns>
        Task<List<MsPointType>> GetList(bool hasDeleted = false);

        /// <summary>
        /// 获取当前项目的站点类型
        /// </summary>
        /// <param name="hasDeleted">是否包含逻辑删除的数据</param>
        /// <returns></returns>
        Task<List<MsPointType>> GetListByProjectId(Guid projectGuid, bool hasDeleted = false);

        /// <summary>
        /// 获取项目的所有站点类型
        /// </summary>
        /// <returns></returns>
        Task<MsPointType> GetPointType(string name, Guid projectGuid);

        /// <summary>
        /// 根据工艺阶段获取站点类型
        /// </summary>
        /// <param name="projectStandardId"></param>
        /// <param name="houseMapId"></param>
        /// <returns></returns>
        Task<List<MsPointTypeDto>> GePointTypeDetail(Guid projectStandardId, Guid houseMapId, Guid PrjectGuid);

        /// <summary>
        /// 获取任务的标准库测量项数据
        /// </summary>
        /// <param name="projectStandardId"></param>
        /// <param name="taskId"></param>
        /// <param name="projectId"></param>
        /// <returns></returns>
        Task<List<MsPointTypeDto>> GetTaskStandards(Guid projectStandardId, Guid taskId, Guid projectId);

        /// <summary>
        /// 去最大类型序号
        /// </summary>
        /// <returns></returns>
        Task<int> GetMaxType(Guid project);

        /// <summary>
        /// 根据站点类型获取对应站点列表
        /// </summary>
        /// <param name="typeId">站点类型Id</param>
        /// <returns></returns>
        Task<List<MeasurePoints>> GetTaskPointsByType(Guid typeId, Guid projectid);

        /// <summary>
        /// 获取项目的站点类型
        /// </summary>
        /// <param name="projectIds"></param>
        /// <returns></returns>
        Task<List<MsPointType>> GetDataByProjects(Guid[] projectIds);
    }
}